/**
 * @file ChatApp.c
 * @brief Short description of this file.
 *
 * Complete description of this file.
 *
 * @date Mar 27, 2012
 * @author Francesco Corvino
 */

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#include "CHandler/envFactory.h"
#include "logproxy/logproxy.h"
#include "RscHost/fifo/managerfifo.h"

#define MAXLINE 1000

/**
 * @brief Filtro per evitare esecuzioni di comandi non alfanumerici.
 */
UserRequest * filterEmptyLine(UserRequest * req){
	char* cmd = req->nameCmd;
	int i,l = strlen(cmd);
	if(l==0) return NULL;
	for(i=0;i<l;i++){
		if(isalnum(cmd[i])) return req;
	}
	return NULL;
}

int main(void) {
    printf("ChatApp init - Utilizza il prompt lanciando i comandi con la seguente sintassi:\n"
    		"%%command:params\n");

    EnvFactory configuration;

    // imposta la funzione per il logging di base.
    defLog_init();
    setUsedLogic(1);
    DynArray_add(getNamesLogged(),"invoker");
//    DynArray_add(getNamesLogged(),"command");
//    DynArray_add(getNamesLogged(),"FIFO");
//    DynArray_add(getNamesLogged(),"udplog");
//    DynArray_add(getNamesLogged(),"applicationLib");

	// inizializza la struttura
	envFact_init(&configuration);
    // imposta le configurazioni di default
	configuration.inputconfig.timeToWaitInput.tv_sec = 10000;
	configuration.inputconfig.timeToWaitInput.tv_usec = 0;

	InputFilter emptyCmdFilter;
	emptyCmdFilter.filter = filterEmptyLine;
//	DynArray_add(&(configuration.inputconfig.requestfilters),&emptyCmdFilter);
	IH_addChainFilter(&emptyCmdFilter);

	// aggiunta delle comunicazioni da fifo
	ConcreteFactoryComm elem;
	MngFifo_getFactoryDesc(&elem);
	DynArray_add(&(configuration.commconfig.factories), &elem);

	// avvia le operazioni
    envFact_start();

    defLog_end();
    return EXIT_SUCCESS;
}
